在聽完昨天關於 Sub-GHz 的各種攻擊理論後,相信大家都等不及拿起 Flipper Zero 來動手學習這些知識了,今天我們會繼續透過 YouTuber Derek Jamison 的影片清單 -- Flipper Zero - Rolling Codes 來學習這些內容。
請注意,透過 Flipper Zero 所學到的技術與知識,主要目的是提升個人技術能力與資訊安全意識。我們強烈呼籲各位,不要將這些知識應用於任何違法活動。您有責任確保所學知識的合法用途。針對今天的主題,大家務必要注意以下幾點:
首先,我們先進到 Flipper 的 Sub-GHz -> Add Manually 之後會看到最下面有一排 Security 開頭的訊號,我們點選 Security+ 1.0 315MHz 並且把它存成 1.0test。補充說明:作者在這個部分是用 LiftMaster,但我沒找到就用這個代替了。
接著,我們到 saved 去模擬這個訊號,可以看到左上角寫著 Security+ 1.0 以及一堆數字,我們借用 Derek Jamison 的影片截圖來協助我們講解:
圖片來源:https://youtu.be/fmCzYAX7O38?si=LeOzLlxPmyya5qYb
左上角可以看到這個協議是 Security+ 1.0,在這個協議中資料是 encoded 不是 encrypted 的,所以可以說是相當不安全也是最簡單的一種協議。而往右邊一個會看到 42b 代表的是封包是 42 位元的,但注意這邊其實是 trits 因為是三進位的,但不知道為什麼不叫 42t,知道的可以在下面留言跟我說。再往右邊就是頻率和調製,然後接著就是當前密鑰。而密鑰的前面一半是固定的前綴,後面則是下面的計數器 Cnt 的值,每按一下會加二,其中當我們把密鑰的前綴換成三進位後就可以看到最後三個 trits 分別代表:
然後扣除前綴扣除最後三個 trits 是他的序列號 Serial Number。
最後是 Sw_id 代表按鈕的值,跟前面那個 Btn 是一樣的只是表示法不同。
那根據我們昨天的介紹,遙控器跟接收器是會分別計數的,所以當我們離開這個畫面後再回來 Cnt 的值是不會改變的。
接著我們可以到 qFlipper -> File Manager -> SD Card -> subghz 找到 1.0test.sub 把他載下來用文字編輯器打開,這邊選擇用 Sublime Text:
Filetype: Flipper SubGhz Key File
Version: 1
Frequency: 315000000
Preset: FuriHalSubGhzPresetOok650Async
Latitute: nan
Longitude: nan
Protocol: Security+ 1.0
Bit: 42
Key: 2C 4C 27 00 E6 00 00 0C
可以看到這邊就是以保存 key 為主,因為其他資料都是從 key parse 出來的,所以現在計次是 0xC / 2,也就是目前按了六下當然我們也可以修改這個值之後再存回去。
這次我們要看的是 KeyLoq 這個協議,我們可以跟剛剛一樣到 Add Manually 去找到 KL: DoorHan 這個製造商,前面的 KL 就是 KeyLoq 的縮寫,所以其實 Flipper 都有很貼心的幫我們把協議寫在製造商前面,這次我們把它存成 KeyLoq_test。
圖片來源:https://youtu.be/x4ml1JAH1q0?si=1ZcHYcQYr8c7WQW-
左上角一樣是他的協議,右邊這次是 64bit,但這次真的是二進位了,Key 就是每次在傳輸的 data,而我們可以看到前 32 個 bits 每次都會不一樣,這部分是用 manufacturer key 或是搭配更多參數像是 Serial Number 或是其他亂數種子加密,這部分就是滾動碼在滾動的部分,但 Flipper Zero 是有能力解密一部份的製造商的,如下:
圖片來源:https://youtu.be/x4ml1JAH1q0?
我們把 Key 寫成二進制並且倒過來我們稱它叫 Yek (英文字母順序反過來),而現在 Yek 的前 32 bits 變成固定的值呈現在 Fix 的欄位,而後 32 bits 則是 Hop 的值,而我們可以發現 Fix 其實就是 Btn + Sn。接著作者嘗試使用 DoorHan 的 Manufacturer Key 解密得到 22540004,分別對應到 Btn: 2,Sn ending: 54,第二個 2 忽略,後面 0004 代表計數,表示我們成功解密了。
這邊因為鐵人賽沒時間等我慢慢網購,所以用作者測試的結果來跟大家討論。作者在第三集買了三個設備要來測試前面提到的協議,分別有:
這邊稱他是一號選手。
圖片來源:https://www.ebay.com.hk/itm/175052241991
這邊稱他是二號選手。
圖片來源:https://www.amazon.com/-/zh_TW/850LM-Liftmaster-Chamberlain-Craftsman-%E8%BB%8A%E5%BA%AB%E9%96%80%E9%96%8B%E5%95%9F%E5%99%A8/dp/B09VBYYHR2
這邊稱他是三號選手。
圖片來源:https://www.amazon.com/LiftMaster-850LM-Universal-Garage-Receiver/dp/B0071EYS9M
而流程是,我們先讓 Flipper 跟接收器手動配對,接著用另一個 Flipper 去錄製原始訊號看能不能成功使用重放攻擊。
一號選手用的是 KeyLoq 但很快就被重放攻擊秒殺。
二號選手用的是 Security+ 2.0,測試時發生了一點小插曲,因為第一次錄製的時候靠得太近所以失敗了,但後來大概隔一公尺再錄一次就一樣用重放攻擊解決掉。
三號選手一樣用的是 Security+ 2.0,作者提醒說他有在 subghz_scene_set_type.c 的 205 行更改了 LM850 接收器的遮罩,變成 key &= 0x7FFFF3FC;
,如果不這樣做的話只有 1/32 的機率會正常運作,最後幸好三號選手通過測試,不然世界真的就要毀滅了,最後作者有再加測試計數器如果落後的話是不會運作的,一直按直到跟接收器現在的計數器相同就可以成功,證明他是使用滾動碼實作的沒錯。
Rolling Flaws 指的就是 Rolling Codes 的各種弱點就像是我們昨天介紹的一樣,而作者在第四集有跟大家介紹一個有趣的 Flipper Zero 應用程式,可以作為接收器其中包含多個參數設定來模擬各種 Rolling Flaws,而作者在這邊用兩個 Flipper 來示範各種攻擊:
圖片來源:https://youtu.be/gMnGuDC9EQo?si=XKvD4r47qs1hGaZT
如上圖,左邊就是攻擊用得 Flipper,而右邊是接收器,會告訴你是否成功打開,並且會顯示打開的原因是什麼,很適合我們學習 Rolling Flaws,如果這個月有時間會跟別人借一個 Flipper 來寫一篇。
Rolling Flaws: https://github.com/jamisonderek/flipper-zero-tutorials/tree/main/subghz/apps/rolling-flaws
YouTube: https://youtu.be/gMnGuDC9EQo?si=NnaknRuKZE3naxSi
今天我們跟著 Derek Jamison 的前四集影片學到了 Security+ 1.0 和 KeyLoq 這兩個協議的封包內容以及他們的運作方式。了解完後我們透過第三集影片看到實際的市售設備測試,並且發現 KeyLoq 也不一定是安全的,還是要看製造商的實作機制如何,以及 Flipper Zero 有沒有辦法解密該製造商的資料,明天我們會聊到 Sub-GHz 的 decoders/encoders 是怎麼運作的,那就明天見!